home *** CD-ROM | disk | FTP | other *** search
/ Motor Sport Digital Archive Collection 1960s / Motor Sport Digital Archive Collection 1960s.iso / main.swf / scripts / mx / rpc / xml / SimpleXMLEncoder.as < prev   
Encoding:
Text File  |  2008-05-21  |  6.4 KB  |  220 lines

  1. package mx.rpc.xml
  2. {
  3.    import flash.xml.XMLDocument;
  4.    import flash.xml.XMLNode;
  5.    import mx.utils.ObjectUtil;
  6.    
  7.    public class SimpleXMLEncoder
  8.    {
  9.       public static const CLASS_INFO_OPTIONS:Object = {
  10.          "includeReadOnly":false,
  11.          "includeTransient":false
  12.       };
  13.       
  14.       private var myXMLDoc:XMLDocument;
  15.       
  16.       public function SimpleXMLEncoder(param1:XMLDocument)
  17.       {
  18.          super();
  19.          this.myXMLDoc = !!param1 ? param1 : new XMLDocument();
  20.       }
  21.       
  22.       internal static function encodeDate(param1:Date, param2:String) : String
  23.       {
  24.          var _loc3_:String = null;
  25.          var _loc4_:Number = NaN;
  26.          _loc3_ = new String();
  27.          if(param2 == "dateTime" || param2 == "date")
  28.          {
  29.             _loc3_ = _loc3_.concat(param1.getUTCFullYear(),"-");
  30.             _loc4_ = param1.getUTCMonth() + 1;
  31.             if(_loc4_ < 10)
  32.             {
  33.                _loc3_ = _loc3_.concat("0");
  34.             }
  35.             _loc3_ = _loc3_.concat(_loc4_,"-");
  36.             _loc4_ = Number(param1.getUTCDate());
  37.             if(_loc4_ < 10)
  38.             {
  39.                _loc3_ = _loc3_.concat("0");
  40.             }
  41.             _loc3_ = _loc3_.concat(_loc4_);
  42.          }
  43.          if(param2 == "dateTime")
  44.          {
  45.             _loc3_ = _loc3_.concat("T");
  46.          }
  47.          if(param2 == "dateTime" || param2 == "time")
  48.          {
  49.             _loc4_ = Number(param1.getUTCHours());
  50.             if(_loc4_ < 10)
  51.             {
  52.                _loc3_ = _loc3_.concat("0");
  53.             }
  54.             _loc3_ = _loc3_.concat(_loc4_,":");
  55.             _loc4_ = Number(param1.getUTCMinutes());
  56.             if(_loc4_ < 10)
  57.             {
  58.                _loc3_ = _loc3_.concat("0");
  59.             }
  60.             _loc3_ = _loc3_.concat(_loc4_,":");
  61.             _loc4_ = Number(param1.getUTCSeconds());
  62.             if(_loc4_ < 10)
  63.             {
  64.                _loc3_ = _loc3_.concat("0");
  65.             }
  66.             _loc3_ = _loc3_.concat(_loc4_,".");
  67.             _loc4_ = Number(param1.getUTCMilliseconds());
  68.             if(_loc4_ < 10)
  69.             {
  70.                _loc3_ = _loc3_.concat("00");
  71.             }
  72.             else if(_loc4_ < 100)
  73.             {
  74.                _loc3_ = _loc3_.concat("0");
  75.             }
  76.             _loc3_ = _loc3_.concat(_loc4_);
  77.          }
  78.          return _loc3_.concat("Z");
  79.       }
  80.       
  81.       private function getDataTypeFromObject(param1:Object) : uint
  82.       {
  83.          if(param1 is Number)
  84.          {
  85.             return DataType.NUMBER_TYPE;
  86.          }
  87.          if(param1 is Boolean)
  88.          {
  89.             return DataType.BOOLEAN_TYPE;
  90.          }
  91.          if(param1 is String)
  92.          {
  93.             return DataType.STRING_TYPE;
  94.          }
  95.          if(param1 is XMLDocument)
  96.          {
  97.             return DataType.XML_TYPE;
  98.          }
  99.          if(param1 is Date)
  100.          {
  101.             return DataType.DATE_TYPE;
  102.          }
  103.          if(param1 is Array)
  104.          {
  105.             return DataType.ARRAY_TYPE;
  106.          }
  107.          if(param1 is Function)
  108.          {
  109.             return DataType.FUNCTION_TYPE;
  110.          }
  111.          if(param1 is Object)
  112.          {
  113.             return DataType.OBJECT_TYPE;
  114.          }
  115.          return DataType.STRING_TYPE;
  116.       }
  117.       
  118.       public function encodeValue(param1:Object, param2:QName, param3:XMLNode) : XMLNode
  119.       {
  120.          var _loc4_:XMLNode = null;
  121.          var _loc5_:uint = 0;
  122.          var _loc6_:Object = null;
  123.          var _loc7_:Array = null;
  124.          var _loc8_:uint = 0;
  125.          var _loc9_:uint = 0;
  126.          var _loc10_:String = null;
  127.          var _loc11_:QName = null;
  128.          var _loc12_:uint = 0;
  129.          var _loc13_:QName = null;
  130.          var _loc14_:uint = 0;
  131.          var _loc15_:String = null;
  132.          var _loc16_:XMLNode = null;
  133.          var _loc17_:String = null;
  134.          var _loc18_:String = null;
  135.          if(param1 == null)
  136.          {
  137.             return null;
  138.          }
  139.          _loc5_ = getDataTypeFromObject(param1);
  140.          if(_loc5_ == DataType.FUNCTION_TYPE)
  141.          {
  142.             return null;
  143.          }
  144.          if(_loc5_ == DataType.XML_TYPE)
  145.          {
  146.             _loc4_ = param1.cloneNode(true);
  147.             param3.appendChild(_loc4_);
  148.             return _loc4_;
  149.          }
  150.          _loc4_ = myXMLDoc.createElement("foo");
  151.          _loc4_.nodeName = param2.localName;
  152.          param3.appendChild(_loc4_);
  153.          if(_loc5_ == DataType.OBJECT_TYPE)
  154.          {
  155.             _loc6_ = ObjectUtil.getClassInfo(param1,null,CLASS_INFO_OPTIONS);
  156.             _loc7_ = _loc6_.properties;
  157.             _loc8_ = _loc7_.length;
  158.             _loc9_ = 0;
  159.             while(_loc9_ < _loc8_)
  160.             {
  161.                _loc10_ = _loc7_[_loc9_];
  162.                _loc11_ = new QName(null,_loc10_);
  163.                encodeValue(param1[_loc10_],_loc11_,_loc4_);
  164.                _loc9_++;
  165.             }
  166.          }
  167.          else if(_loc5_ == DataType.ARRAY_TYPE)
  168.          {
  169.             _loc12_ = uint(param1.length);
  170.             _loc13_ = new QName(null,"item");
  171.             _loc14_ = 0;
  172.             while(_loc14_ < _loc12_)
  173.             {
  174.                encodeValue(param1[_loc14_],_loc13_,_loc4_);
  175.                _loc14_++;
  176.             }
  177.          }
  178.          else
  179.          {
  180.             if(_loc5_ == DataType.DATE_TYPE)
  181.             {
  182.                _loc15_ = encodeDate(param1 as Date,"dateTime");
  183.             }
  184.             else if(_loc5_ == DataType.NUMBER_TYPE)
  185.             {
  186.                if(param1 == Number.POSITIVE_INFINITY)
  187.                {
  188.                   _loc15_ = "INF";
  189.                }
  190.                else if(param1 == Number.NEGATIVE_INFINITY)
  191.                {
  192.                   _loc15_ = "-INF";
  193.                }
  194.                else
  195.                {
  196.                   _loc17_ = param1.toString();
  197.                   _loc18_ = _loc17_.substr(0,2);
  198.                   if(_loc18_ == "0X" || _loc18_ == "0x")
  199.                   {
  200.                      _loc15_ = parseInt(_loc17_).toString();
  201.                   }
  202.                   else
  203.                   {
  204.                      _loc15_ = _loc17_;
  205.                   }
  206.                }
  207.             }
  208.             else
  209.             {
  210.                _loc15_ = param1.toString();
  211.             }
  212.             _loc16_ = myXMLDoc.createTextNode(_loc15_);
  213.             _loc4_.appendChild(_loc16_);
  214.          }
  215.          return _loc4_;
  216.       }
  217.    }
  218. }
  219.  
  220.